package com.bwda.dsrs.base.centerbase.request;

import com.bwda.dsrs.base.centerbase.exception.ArgumentException;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

/**
 * @description:
 * @author: yangjun
 * @create: 2019-07-30 10:40
 */
public class ParamChecker {
    public ParamChecker() {
    }

    public static void isBlank(String string, String msg) {
        if (StringUtils.isNotBlank(string)) {
            throw new ArgumentException(msg);
        }
    }

    public static void notBlank(String string, String msg) {
        if (StringUtils.isBlank(string)) {
            throw new ArgumentException(msg);
        }
    }

    public static void notEmpty(Collection collection, String msg) {
        if (null == collection || collection.isEmpty()) {
            throw new ArgumentException(msg);
        }
    }

    public static void nonBlankElements(Collection<String> collection, String elementMsg) {
        Iterator var2 = collection.iterator();

        while (var2.hasNext()) {
            String str = (String) var2.next();
            notBlank(str, elementMsg);
        }

    }

    public static void nonNull(Object object, String msg) {
        if (null == object) {
            throw new ArgumentException(msg);
        }
    }

    public static void isNull(Object object, String msg) {
        if (null != object) {
            throw new ArgumentException(msg);
        }
    }

    public static void expectTrue(boolean boolExpression, String trueMsg) {
        if (!boolExpression) {
            throw new ArgumentException(trueMsg);
        }
    }

    public static void expectFalse(boolean boolExpression, String trueMsg) {
        if (boolExpression) {
            throw new ArgumentException(trueMsg);
        }
    }

    public static void expectAnyFalse(String msg, Boolean... booleans) throws ArgumentException {
        if (Arrays.stream(booleans).allMatch((t) -> {
            return t;
        })) {
            throw new ArgumentException(msg);
        }
    }

    public static void expectInRange(Collection collection, int minElements, int maxElements, String outRangeMsg) {
        int elements = collection.size();
        if (elements < minElements || elements > maxElements) {
            throw new ArgumentException(outRangeMsg);
        }
    }
}